
using namespace std;

#include "Elemento.h"
#include "defines.h"

Elemento::Elemento(short int id,unsigned short int idImagen, int posX, int posY, int alto, int ancho, unsigned char tipo, bool vivo){
    this->id        = id;
    this->idImagen  = idImagen;
    this->posX      = posX;
    this->posY      = posY;
    this->tipo      = tipo;
    this->ancho		= ancho;
    this->alto		= alto;
    this->vivo		= vivo;
}

//Destructor
Elemento::~Elemento(){
	free(this);
}
 
//Getters
int Elemento::getPosX(){
    return posX;
}
int Elemento::getPosY(){
    return posY;
}
short int Elemento::getId(){
    return id;
}
int Elemento::getAncho(){
    return ancho;
}
int Elemento::getAlto(){
    return alto;
}
unsigned char Elemento::getTipo(){
    return tipo;
}
bool Elemento::isVivo(){
    return vivo;
}

//Setters
void Elemento::setIdImagen(unsigned short int idImage){
	this->idImagen = idImage;
}
void Elemento::setVivo(bool vivo){
	this->vivo = vivo;
}

void Elemento::setPosX(int posX){
	this->posX = posX;
}
void Elemento::setPosY(int posY){
	this->posY = posY;
}

//Mueve el objeto en la pantalla
void Elemento::moverse(int offsetX, int offsetY){
	//Si se puede mover horizontal, se mueve.
	if(this->puedoMovermeHorizontalmente(offsetX)){
	        this->posX = this->posX + offsetX;
	}
	//Si se puede mover vertical, se mueve.
	if(this->puedoMovermeVerticalmente(offsetY)){
		this->posY = this->posY + offsetY;
	}
}

//Para ver que no se salga de la cuadrilla.
bool Elemento::puedoMovermeVerticalmente(int cant){
	/* Si no esta vivo no se puede mover */
	if(this->vivo){
		if(this->getTipo() == TIPO_ELEM_RALPH)
			return CONST_TRUE;
		else{
			/* Si esta vivo veo que no se salga de la pantalla */
			if((this->posY+cant) <= LIM_INF && (this->posY+cant) >= LIM_SUP )
				return CONST_TRUE;
			else
				return CONST_FALSE;
		}
	}else
		return CONST_FALSE;
}

//Para ver que no se salga de la cuadrilla.
bool Elemento::puedoMovermeHorizontalmente(int cant){
	/* Si no esta vivo no se puede mover */
	if(this->vivo){
		if(this->getTipo() == TIPO_ELEM_AVE && (this->posX + cant) > LIM_IZQ)
			return CONST_TRUE;
		else if(this->getTipo() == TIPO_ELEM_LADRILLO)
			return CONST_TRUE;
		else{
			/* Si esta vivo veo que no se salga de la pantalla */
			if((this->posX+cant) >= LIM_IZQ && (this->posX+cant) <= LIM_DER )
				return CONST_TRUE;
			else
				return CONST_FALSE;
		}
	}else
		return CONST_FALSE;
}
